/*******************************************************************************
 * Copyright 2017 Bstek
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License.  You may obtain a copy
 * of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations under
 * the License.
 ******************************************************************************/
package com.bstek.ureport.expression.function.date;

import java.time.LocalDateTime;
import java.util.List;

import com.bstek.ureport.build.Context;
import com.bstek.ureport.exception.IndependenceException;
import com.bstek.ureport.expression.function.Function;
import com.bstek.ureport.expression.model.data.ExpressionData;
import com.bstek.ureport.expression.model.data.ObjectExpressionData;
import com.bstek.ureport.expression.model.data.ObjectListExpressionData;
import com.bstek.ureport.model.Cell;
import com.bstek.ureport.utils.DateUtils;

/**
 * @author Jacky.gao
 * @since 2017年1月22日
 */
public class YearFunction implements Function {

	@Override
	public Object execute(List<ExpressionData<?>> params, Context context, Cell currentCell) {
		if (params == null || params.size() == 0) {
			LocalDateTime t = LocalDateTime.now();
			return t.getDayOfMonth();
		}
		if (params.size() > 1) {
			throw new IndependenceException("year函数运行时参数最多只有一个");
		}
		ExpressionData<?> data = params.get(0);
		Object obj = null;
		if (data instanceof ObjectListExpressionData) {
			ObjectListExpressionData listData = (ObjectListExpressionData) data;
			List<?> list = listData.getData();
			if (list != null && list.size() > 0) {
				obj = list.get(0);
			}
		} else if (data instanceof ObjectExpressionData) {
			ObjectExpressionData objData = (ObjectExpressionData) data;
			obj = objData.getData();
		}
		LocalDateTime localDateTime = DateUtils.toLocalDateTime(obj);
		if(localDateTime != null) {
			return localDateTime.getYear();
		}
		return 0;
	}

	@Override
	public String name() {
		return "year";
	}
}
